? ?1、 數(shù)組(Arrary)
? ? ? ? ? ? ? ? 數(shù)組是一種線性結(jié)構(gòu)的數(shù)據(jù),連續(xù)的存儲空間和相同的類型數(shù)據(jù)。查詢速度快,但是數(shù)組的容量固定,無法擴容,只能存儲同類型的數(shù)據(jù),對于添加和刪除元素比較慢
? ? ? ? 2、棧(Stark)
? ? ? ? ? ? ? ? 棧是一種先進后出的一種結(jié)構(gòu),好比水桶。例如虛擬機棧,方法棧等
? ? ? ? 3、鏈表(Linked List)
? ? ? ? ? ? ? ? 鏈表是一種線性的鏈?zhǔn)浇Y(jié)構(gòu),鏈表的內(nèi)存不是連續(xù)的,前一個節(jié)點存儲的地址不一定就是一個元素,可能是一個引用,通過這個引用可以拿到對應(yīng)的對象。鏈表是通過一個節(jié)點指向另一個節(jié)點的地址將元素串起來。
? ? ? ? ? ? ? ? 單向鏈表:最簡單的鏈表格式。鏈表的最小單元為節(jié)點,每一個節(jié)點包含了數(shù)據(jù)和指向下一個節(jié)點的指針。
? ? ? ? ? ? ? ? 雙向鏈表:兩個方向的鏈表。鏈表的每個節(jié)點包含了數(shù)據(jù)以及前一個節(jié)點地址的指針和后一個節(jié)點的地址指針。這種數(shù)據(jù)結(jié)構(gòu)的好處是通過當(dāng)前節(jié)點可以通過時間復(fù)雜度o(1)很快定位到前置節(jié)點和后置節(jié)點,但是通過前置指針和后置指針的配置增加了內(nèi)存的消耗。
? ? ? ? ? ? ? ? 循環(huán)鏈表:跟雙向列表差不多,但是唯一的區(qū)別就是尾節(jié)點的后置指針指向頭節(jié)點,頭節(jié)點也有指針指向了尾節(jié)點。
? ? ? ? 3、哈希(Hash)
? ? ? ? ? ? ? ? 哈希也叫做散列。通過key-vlue的方式存儲,在很大程度上提高了數(shù)據(jù)的查詢,增加和刪除。hash結(jié)合數(shù)組和鏈表的特性(數(shù)組查詢快,鏈表增刪快)。
? ? ? ? ? ? ? ? Java最經(jīng)典的HashMap的底層實現(xiàn)是數(shù)組+鏈表+紅黑樹
? ? ? ? ? ? ? ? hash函數(shù)在hash表中起到至關(guān)重要作用,數(shù)據(jù)通過hash函數(shù)生成一個固定的hash值,通過hash值可以很快的定位到元素。但是hash值不是唯一的,就將hash值相同的放入鏈表中,如果鏈表的長度超過8,或者大小超過64,就將鏈表轉(zhuǎn)化為紅黑樹。
? ? ? ? 4、隊列(Queue)
? ? ? ? ? ? ? ? 隊列是特殊的線性結(jié)構(gòu),一種先進先出的數(shù)據(jù)存儲結(jié)構(gòu),數(shù)據(jù)的刪除操作只能在頭部操作,插入在尾部操作。
? ? ? ? 5、樹(Tree)
? ? ? ? ? ? ? ? 樹是一種線性結(jié)構(gòu),有節(jié)點組成的集合。
? ? ? ? ? ? ? ? 二叉樹:每一個節(jié)點最多有兩個子樹
? ? ? ? ? ? ? ? 完全二叉樹:除了最外層節(jié)點,其他的節(jié)點都達到最大的層數(shù)
? ? ? ? ? ? ? ? 滿二叉樹:一個樹的節(jié)點要么是葉子節(jié)點,要么就是有兩個節(jié)點
? ? ? ? ? ? ? ? 平衡二叉樹:任何節(jié)點的子樹高度差不超過1;
? ? ? ? ? ? ? ? 二叉查找樹:任意節(jié)點的左子樹都不能為空,并且左子樹所有節(jié)點的值都小于根節(jié)點;任意節(jié)點的右子樹不能為空,并且右子樹所有節(jié)點的值都大于根節(jié)點;任意節(jié)點的左右子樹都是一個二叉查找樹。
? ? ? ? ? ? ? ? B樹:一種堆讀寫優(yōu)化的自平衡二叉樹,在數(shù)據(jù)庫索引的常用索引數(shù)據(jù)的結(jié)構(gòu)。
? ? ? ? ? ? ? ? B+樹:所有非葉子節(jié)點都是索引部分,節(jié)點中僅包含根節(jié)點的最大或者最小的關(guān)鍵字;所有葉子節(jié)點包含了所有關(guān)鍵字的信息以及含有這些關(guān)鍵字記錄的指針,而且葉子節(jié)點數(shù)據(jù)根據(jù)關(guān)鍵節(jié)點的大小從小到大排列;m個子樹的中間節(jié)點包含有m個元素,每個元素不包含數(shù)據(jù),只包含索引。
? ? ? ? ? ? ? ? 紅黑樹
? ? ? ? ? ? ? ? 紅黑樹是一種平衡二叉樹,通過顏色約束樹的平衡。每一個元素要么紅色,要么黑色;根節(jié)點一定是黑色;每個葉子節(jié)點都是黑色的;如果一個節(jié)點為紅色,那么他的所有子節(jié)點都是黑色,因為每一條路徑上都不能出現(xiàn)相鄰兩個節(jié)點是同一顏色;每一個葉子節(jié)點的所有路徑存在的黑色節(jié)點都相同。
? ? ? ? 6、堆(Heap)
? ? ? ? ? ? ? ? 堆是一種特殊的樹形結(jié)構(gòu),父節(jié)點的值大于等于子節(jié)點的值或者小于子節(jié)點的值。對于max heap根節(jié)點是所有節(jié)點的最大值 或者min heap根節(jié)點值是所有節(jié)點最小的值。
? ? ? ? 7、圖(Graph)
? ? ? ? ? ? ? ? 一個圖就是一些頂點的集合,這些頂點通過一系列邊結(jié)對(連接)。頂點用圓圈表示,邊就是這些圓圈之間的連線。頂點之間通過邊連接。
? ? ? ? ? ? ? ? 節(jié)點之間的關(guān)系是任意的,圖中任意兩個數(shù)據(jù)元素之間都有可能相關(guān)。